package iterator;

/**
 * 迭代器(Iterator)模式又叫做游标(Cursor)模式
 * 提供一种方法访问一个容器(container)对象中各个元素，而又不需要暴露该对象的内部细节。
 * Iterator 模式就是分离了集合对象的遍历行为，抽象出一个迭代器类来负责，这样既可以做到不暴露集合的内部结构，又可让外部代码透明的访问集合内部的数据。
 * 例如Tree,HashSet等容器提供Iterator
 * <p>
 * 若有新的存储结构，可new一个ICollection，对应的new 一个IIterator来实现它的遍历。
 **/
public class MainTest {
	public static void main(String[] args) {
		ICollection<Integer> collection = new MyCollection<>();
		add(collection, 3, 5, 6, 8, 9, 10, 56, 96, 5);
		for (IIterator<Integer> iterator = collection.iterator(); iterator.hasNext(); ) {
			System.out.println(iterator.next());
		}

		System.out.println("----------------------");

		ICollection<Object> collection2 = new MyCollection<>();
		add(collection2, "a", "b", "c", "d", 3, 5, 6, 7);
		for (IIterator<Object> iterator = collection2.iterator(); iterator.hasNext(); ) {
			System.out.println(iterator.next());
		}
	}

	@SuppressWarnings("unchecked")
	static <T> void add(ICollection<T> c, T... a) {
		for (T t : a) {
			c.add(t);
		}
	}
	/**
	 * 推荐博客：http://blog.csdn.net/zhengzhb/article/details/7610745
	 *
	 */
}
